home *** CD-ROM | disk | FTP | other *** search
- From: Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
- Date: Mon, 16 Aug 93 10:38:39 +0200
- Message-Id: <9308160838.AA13786@issan.informatik.uni-dortmund.de>
- To: reschke@goedel.uni-muenster.de
- In-Reply-To: <9308141415.AA16895@math.uni-muenster.de> (message from Julian Reschke on Sat, 14 Aug 93 16:15:54 MET DST)
- Subject: Re: 1.08, Pexec mode 200
-
- >>>>> Julian Reschke <reschke@GOEDEL.UNI-MUENSTER.DE> writes:
- |> Hi,
-
- |> with 1.08, Pexec mode 200 reliably crashes on my system (just try something
- |> like Pexec (200, filename, "", 0L); -> memory violation). It seems that
- |> the new process tries to access either the basepage or the environment
- |> and crashes. Turning of MP cures that.
-
- |> Any help appreciated.
-
- Here is a patch:
-
- --- orig/dosmem.c Thu Aug 5 19:09:54 1993
- +++ ./dosmem.c Sat Aug 14 02:33:32 1993
- @@ -558,6 +558,32 @@
- if (xattr.mode & S_ISGID)
- p->egid = xattr.gid;
- }
- +
- + /* jr: add Pexec information to PROC struct */
- + p->cmdlin[0] = 0;
- + if (mkbase || mkload)
- + strncpy(p->cmdlin, ptr2, 128);
- + p->fname[0] = 0;
- + if (mkload)
- + {
- + char tmp[PATH_MAX];
- + char *source = ptr1;
- + tmp[1] = ':';
- + if (source[1] == ':') {
- + tmp[0] = source[0];
- + source += 2;
- + } else
- + tmp[0] = 'A' + curproc->curdrv;
- + if (DIRSEP(source[0])) /* absolute path? */
- + {
- + strncpy (&tmp[2], &source[0], PATH_MAX-2);
- + strcpy (p->fname, tmp);
- + } else {
- + if (! d_getcwd (&tmp[2], tmp[0] - 'A' + 1, PATH_MAX - 2))
- + ksprintf (p->fname, "%s\\%s", tmp, source);
- + }
- + }
- +
- /* exec_region frees the memory attached to p; that's always what
- * we want, since fork_proc duplicates the memory, and since
- * if we didn't call fork_proc then we're overlaying.
- @@ -588,31 +614,6 @@
- if (p->ptracer)
- p->ctxt[CURRENT].ptrace = 1;
-
- - /* jr: add Pexec information to PROC struct */
- - p->cmdlin[0] = 0;
- - if (mkbase || mkload)
- - strncpy(p->cmdlin, ptr2, 128);
- - p->fname[0] = 0;
- - if (mkload)
- - {
- - char tmp[PATH_MAX];
- - char *source = ptr1;
- - tmp[1] = ':';
- - if (source[1] == ':') {
- - tmp[0] = source[0];
- - source += 2;
- - } else
- - tmp[0] = 'A' + curproc->curdrv;
- - if (DIRSEP(source[0])) /* absolute path? */
- - {
- - strncpy (&tmp[2], &source[0], PATH_MAX-2);
- - strcpy (p->fname, tmp);
- - } else {
- - if (! d_getcwd (&tmp[2], tmp[0] - 'A' + 1, PATH_MAX - 2))
- - ksprintf (p->fname, "%s\\%s", tmp, source);
- - }
- - }
- -
- /* set the time/date stamp of u:\proc */
- proctime = timestamp;
- procdate = datestamp;
-
- ----------------------------------------------------------------------
- Andreas Schwab "And now for something
- schwab@ls5.informatik.uni-dortmund.de completely different"
-